/**
 * 支行综合评分状态管理
 * 用于在不同组件间共享评分数据，避免重复请求
 */

import { ref, computed } from 'vue'

// 全局状态
const branchScores = ref({})
const isLoading = ref(false)
const lastUpdateTime = ref(null)

// 原始数据缓存（分子、分母、指标数据）
const rawScoreData = ref(null)      // 所有支行的原始指标数据
const rawScoreResult = ref(null)    // 评分计算结果
const rawIndicators = ref(null)     // 指标配置
const rawBussDate = ref(null)       // 业务日期
const rawStartDate = ref(null)      // 期初日期

// 支行前十大贷款户数据
const branchTopLoans = ref({})          // 前十大贷款户 { orgNo: customers[] }
const branchTopBadLoans = ref({})       // 前十大不良贷款户 { orgNo: customers[] }

/**
 * 使用支行评分存储
 */
export function useBranchScoreStore() {
  /**
   * 设置支行评分数据
   * @param {Object} scores - 评分数据对象 { orgNo: finalScore }
   */
  const setScores = (scores) => {
    branchScores.value = scores
    lastUpdateTime.value = Date.now()
    console.log('[评分存储] 评分数据已更新，共', Object.keys(scores).length, '个支行')
  }

  /**
   * 设置原始评分数据（包含分子分母和指标数据）
   * @param {Object} data - 原始数据对象
   * @param {Object} data.scoreData - 所有支行的原始指标数据
   * @param {Object} data.scoreResult - 评分计算结果
   * @param {Object} data.indicators - 指标配置
   * @param {string} data.bussDate - 业务日期
   * @param {string} data.startDate - 期初日期
   */
  const setRawData = (data) => {
    rawScoreData.value = data.scoreData
    rawScoreResult.value = data.scoreResult
    rawIndicators.value = data.indicators
    rawBussDate.value = data.bussDate
    rawStartDate.value = data.startDate
    lastUpdateTime.value = Date.now()
    console.log('[评分存储] 原始数据已保存')
    console.log('[评分存储] - 支行数量:', Object.keys(data.scoreData || {}).length)
    console.log('[评分存储] - 指标数量:', Object.keys(data.indicators || {}).length)
    console.log('[评分存储] - 业务日期:', data.bussDate)
  }

  /**
   * 获取支行评分数据
   * @returns {Object} 评分数据对象
   */
  const getScores = () => {
    return branchScores.value
  }

  /**
   * 获取单个支行的评分
   * @param {string} orgNo - 机构号
   * @returns {number} 评分
   */
  const getScore = (orgNo) => {
    return branchScores.value[orgNo] || 0
  }

  /**
   * 检查是否有数据
   * @returns {boolean}
   */
  const hasData = computed(() => {
    return Object.keys(branchScores.value).length > 0
  })

  /**
   * 设置加载状态
   * @param {boolean} loading
   */
  const setLoading = (loading) => {
    isLoading.value = loading
  }

  /**
   * 获取原始评分数据
   * @returns {Object|null} 原始数据对象
   */
  const getRawData = () => {
    if (!rawScoreData.value) return null
    return {
      scoreData: rawScoreData.value,
      scoreResult: rawScoreResult.value,
      indicators: rawIndicators.value,
      bussDate: rawBussDate.value,
      startDate: rawStartDate.value
    }
  }

  /**
   * 检查是否有原始数据
   * @returns {boolean}
   */
  const hasRawData = computed(() => {
    return rawScoreData.value !== null && Object.keys(rawScoreData.value || {}).length > 0
  })

  /**
   * 获取按评分排序的支行列表
   * @param {Array} branches - 支行列表
   * @returns {Array} 带评分的排序后的支行列表
   */
  const getSortedBranches = (branches) => {
    return branches
      .map(branch => ({
        ...branch,
        score: branchScores.value[branch.orgNo] || 0
      }))
      .sort((a, b) => b.score - a.score)
  }

  /**
   * 设置支行前十大贷款户数据
   * @param {Object} data - 前十大贷款户数据 { orgNo: customers[] }
   */
  const setTopLoans = (data) => {
    branchTopLoans.value = data
    console.log('[评分存储] 前十大贷款户数据已更新，共', Object.keys(data).length, '个支行')
  }

  /**
   * 设置支行前十大不良贷款户数据
   * @param {Object} data - 前十大不良贷款户数据 { orgNo: customers[] }
   */
  const setTopBadLoans = (data) => {
    branchTopBadLoans.value = data
    console.log('[评分存储] 前十大不良贷款户数据已更新，共', Object.keys(data).length, '个支行')
  }

  /**
   * 获取支行前十大贷款户数据
   * @param {string} orgNo - 机构号
   * @returns {Array} 客户列表
   */
  const getTopLoans = (orgNo) => {
    return branchTopLoans.value[orgNo] || []
  }

  /**
   * 获取支行前十大不良贷款户数据
   * @param {string} orgNo - 机构号
   * @returns {Array} 客户列表
   */
  const getTopBadLoans = (orgNo) => {
    return branchTopBadLoans.value[orgNo] || []
  }

  /**
   * 检查是否有前十大贷款户数据
   * @returns {boolean}
   */
  const hasTopLoansData = computed(() => {
    return Object.keys(branchTopLoans.value).length > 0
  })

  /**
   * 清除所有数据
   */
  const clearAllData = () => {
    branchScores.value = {}
    rawScoreData.value = null
    rawScoreResult.value = null
    rawIndicators.value = null
    rawBussDate.value = null
    rawStartDate.value = null
    branchTopLoans.value = {}
    branchTopBadLoans.value = {}
    lastUpdateTime.value = null
    console.log('[评分存储] 所有数据已清除')
  }

  return {
    branchScores,
    isLoading,
    lastUpdateTime,
    hasData,
    hasRawData,
    hasTopLoansData,
    setScores,
    setRawData,
    getScores,
    getScore,
    getRawData,
    setLoading,
    getSortedBranches,
    setTopLoans,
    setTopBadLoans,
    getTopLoans,
    getTopBadLoans,
    clearAllData
  }
}


